home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / games / km21 / src / stage000.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-12-05  |  40.3 KB  |  1,981 lines

  1. /*
  2.     stage000.c
  3.  
  4. 親:COM
  5. 子:PLAYER
  6.  
  7. */
  8. #include    <math.h>
  9. #include    <iocslib.h>
  10. #include    <stdlib.h>
  11. #include    "STRUCTS.INC"
  12. #include    "MAINSYS.INC"
  13. #include    "SPCTBL.INC"
  14. #include    "stepman.inc"
  15.  
  16.  
  17. int    STAGE000_JOB();
  18. int    CHRTEST000_JOB();
  19. int    PLAYER000_JOB();
  20. int    ENEMY000_JOB();
  21.  
  22.  
  23. extern    int    shtmod;
  24. extern    int    dipSwitch;
  25. /*
  26.     ディップスイッチ
  27.     0@@@ @@@@
  28.      ||| |||+--予約
  29.      ||| ||+---負け直前
  30.      ||| |+----勝ち直前
  31.      ||| +-----デバッグ情報のprint
  32.      ||+-------思考時のにおける変動確率を固定
  33.      |+--------強制アニメOFF
  34.      +---------感情判断(0=kanjyo_KIAI/1=kanjyo_HNADAN)
  35. */
  36.  
  37.  
  38.  
  39. extern    int    TNUM__SetPalet();
  40.  
  41. extern    int    TR_PUT();
  42.  
  43. /*
  44.     ステージ用タスク初期設定
  45. */
  46. int    StepMan__stage000_init()
  47. {
  48.     TASK    *mTask;
  49.  
  50.     srand(ONTIME());
  51.     AllTaskFree();
  52.  
  53.     mTask=MTaskAlloc();
  54.     if( shtmod==0 ){
  55.         mTask->func_addr=STAGE000_JOB;
  56.     }
  57.     else{
  58.         mTask->func_addr=CHRTEST000_JOB;
  59.     }
  60.  
  61.     return(0);
  62. }
  63.  
  64.  
  65.  
  66. short    kanjyo_NOW;        //現在の感情値
  67. short    kanjyo_HYOUKA;        //現在の感情評価値
  68. char    *kanjyo_HYOUKA_STR[5]={
  69.     "大喜","喜","普通","哀","大哀"
  70. };
  71.  
  72.  
  73. short    kanjyo_HANDAN_lv=3;    //どの感情評価判断値を使うか
  74. short    kanjyo_HANDAN[7][6]={    //感情評価判断値
  75.  
  76. //    |  20|   40    |               136               |    40   |20  |(動じない)
  77. {     127, 107,  67, -69,-109,-128        },
  78. //    |  24 |    48     |            112            |     48    | 24  |
  79. {     127, 103,  55, -57,-105,-128        },
  80. //    |  32   |      56     |         80        |       56    |   32  |
  81. {     127,  95,  39, -41, -97,-128        },
  82.  
  83. //    |  32   |      72       |       48      |       72      |   32  |(普通?)
  84. {     127,  95,  23, -25, -97,-128        },
  85.  
  86. //    |  40     |     64      |       48      |      64      |    40  |
  87. {     127,  87,  23, -25, -89,-128        },
  88. //    |  48       |     64      |     32    |      64      |      48  |
  89. {     127,  79,  15, -15, -81,-128        },
  90. //    |  56         |     56      |   24  |      56      |        56  |(動じる)
  91. {     127,  71,  11, -13, -73,-128        }
  92. };
  93.  
  94. char    *kanjyo_HANDAN_STR[7]={
  95.     "全く動じない","多少のコトでは動じない","あまり動じない",
  96.     "普通",
  97.     "少し動じる","かなり動じる","絶望的に動じる"
  98. };
  99.  
  100.  
  101.  
  102.  
  103. short    kanjyo_KIAI_lv=3;    //喜哀判断値どの感情評価判断値を使うか
  104. short    kanjyo_KIAI[7][6]={    //感情評価判断値
  105.  
  106. //        12    40   64  76   64        (喜び難い大)
  107. {     127, 115,  75,  11, -65,-128        },
  108. //        24   44   76   68   44        (喜び難い中)
  109. {     127, 103,  59, -17, -85,-128        },
  110. //         28   48   76   64   40        (喜び難い小)
  111. {     127,  99,  51, -25, -89,-128        },
  112. //○    |  32   |      64       |       64      |       64      |   32  |(普通?)
  113. {     127,  95,  31, -33, -97,-128        },
  114. //    |  40     |      64      |       76        |     48      |  28  |(喜び易い小)
  115. {     127,  87,  23, -53,-101,-128        },
  116. //    |  44      |      68       |       76        |      44    |  24 |(喜び易い中)
  117. {     127,  83,  15, -61,-105,-128        },
  118. //    |  64           |      76         |      64       |     40   |12|(喜び易い大)
  119. {     127,  63, -13, -77,-117,-128        }
  120.  
  121. };
  122.  
  123. char    *kanjyo_KIAI_STR[7]={
  124.     "絶望的に喜び難い","かなり喜び難い","少し喜び難い",
  125.     "普通",
  126.     "少し喜び易い","かなり喜び易い","メッチャ喜び易い",
  127. };
  128.  
  129.  
  130.  
  131. short    biorhythm_theta;
  132. short    biorhythm_tbl[7+1]={
  133. //    |  16|   36   |    48    |     56     |    48     |   36   |16  |
  134.     127,111,75,27,-29,-77,-113,-128
  135. };
  136.  
  137. short    card_MOUNTAIN[52];    //カードの山:それぞれ1~52が入る
  138. short    card_PTR;        //山から使ったカードの数:先頭ポインタのようなもの
  139. short    card_PLAYER[5];        //プレーヤーの手札
  140. short    card_COM[5];        //COMの手札
  141. short    card_PLAYER_HAVE;    //プレーヤーが持っている枚数
  142. short    card_COM_HAVE;        //COMが持っている枚数
  143.  
  144. //                       +--------配られた枚数(2~5)0,1はダミー
  145. //                       +  ++----現在のカード番号の合計(~21まで)
  146. short    card_PLUS_KANJYO[6][22]={
  147. //0
  148.     {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    },
  149. //1
  150.     {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0    },
  151.  
  152. //・最初に2枚配った時の値による感情値(デフォルト?)
  153.     {    0,0,-1,-1,-2,-2,-1,0,1,2,3,3,0,-1,-2,-3,-3,-1,0,2,6,7    },
  154.  
  155. //・3枚目
  156.     {    0,0,0,-4,-3,-3,-2,-1,-1,-1,1,1,0,-1,-1,-2,-2,-1,0,1,5,6    },
  157.  
  158. //・4枚目
  159.     {    0,0,0,0,-4,-3,-2,-2,-2,-2,1,1,0,0,-1,-1,-1,0,0,1,4,5    },
  160.  
  161. //・5枚目
  162.     {    0,0,0,0,0,0,-5,-5,-5,-5,-5,-4,-4,-4,-2,-2,-1,0,0,1,2,3    }
  163. };
  164.  
  165. short    card_LOST_KANJYO[21]={
  166. //・3枚目以降の失敗
  167.     0,0,0,0,0,0,0,0,0,0,0,0,-7,-7,-6,-6,-5,-4,-5,-5,-6
  168. };
  169.  
  170. /*
  171.     /勝利        /敗北
  172.     敵2345    敵2345
  173.     2+5+6+5+4    2-6-4-5-4
  174.   自    3+6+5+4+4 自    3-5-6-5-4
  175.   分    4+4+5+6+5 分    4-4-5-6-5
  176.     5+4+4+5+6    5-4-4-5-6
  177. */
  178. //                 +----PLAYER枚数
  179. //                 |  +-COM枚数
  180. short    bounus_WIN[6][6]={
  181.     {0,0,0,0,0,0},
  182.     {0,0,0,0,0,0},
  183.  
  184.     {0,0,5,6,5,4},
  185.     {0,0,6,5,4,4},
  186.     {0,0,4,5,6,5},
  187.     {0,0,4,4,5,6}
  188. };
  189.  
  190. short    bounus_LOSE[6][6]={
  191.     {0,0,0,0,0,0},
  192.     {0,0,0,0,0,0},
  193.  
  194.     {0,0,-6,-4,-5,-4},
  195.     {0,0,-5,-6,-5,-4},
  196.     {0,0,-4,-5,-6,-5},
  197.     {0,0,-4,-4,-5,-6}
  198. };
  199.  
  200.  
  201.  
  202. /*
  203.     ゲーム固有系?
  204. */
  205. //    チップ
  206. short    chips_PLAYER,chips_oPLAYER,    //PLAYERの
  207.     chips_COM,        //COMのチップの数
  208.     chips_BET;        //場にかけてあるチップの数
  209.  
  210. /*    COMの連勝カウンタ
  211. */
  212. short    winlose_COM_COMBO,    //連勝(負)カウンタ+nで連勝数、-nで連敗数
  213.     winlose_COM_DRAW_COMBO;    //連勝引き分けカウンタ
  214.  
  215. #define        winlose_COM_HISTORYS    (5)    //過去の勝負履歴
  216. short    winlose_COM_HISTORY[4];    //過去4回分の勝負履歴
  217.  
  218. short    winlose_COM_WIN_TOTAL,    //合計勝ち数
  219.     winlose_COM_LOSE_TOTAL,    //  負け
  220.     winlose_COM_DRAW_TOTAL,    //  引き分け
  221.     winlose_COM_GAME_TOTAL;    //  試合数
  222.  
  223.  
  224.  
  225.     
  226. /*
  227.     バイオリズム値(0~6)を得る
  228. */
  229. short    get_biorhythm()
  230. {
  231.     short    b,bn;
  232.     b=(short) (sin(biorhythm_theta*3.14/180)*127);
  233.  
  234.     for( bn=0; bn<7; bn++ ){
  235.         if( biorhythm_tbl[bn]>=b && b>=biorhythm_tbl[bn+1] ){
  236.             break;
  237.         }
  238.     }
  239.     return(bn);
  240. }
  241.  
  242.  
  243.  
  244. //カードの数字を得る
  245. short    card_NUM(card)
  246. short    card;
  247. {
  248.     short    num;
  249.     if( card>39 ){        num=card-39;    }
  250.     else if( card>26 ){    num=card-26;    }
  251.     else if( card>13 ){    num=card-13;    }
  252.     else {            num=card;    }
  253.  
  254.     return(num);
  255. }
  256.  
  257.  
  258.  
  259. /*
  260.     手札の初期化および
  261.     カードのシャッフル
  262. */
  263. short    card_SHUF()
  264. {
  265.     char    al[52+1];    //配置済みか?0=まだ/1=済み
  266.     short    cn,r,alcn;
  267.  
  268.     card_PTR=0;
  269.     for( cn=0; cn<5; cn++ ){
  270.         card_PLAYER[cn]=0;    //手札の初期化
  271.         card_COM[cn]=0;
  272.     }
  273.     for( cn=0; cn<53; cn++ ){    al[cn]=0;    }
  274.     alcn=0;
  275.     cn=0;
  276.     while( cn<52 ){
  277.         r=rand()%52+1;
  278.         if( al[r]==0 ){
  279.             card_MOUNTAIN[alcn++]=r;
  280.             al[r]=1;
  281.             cn++;
  282.         }
  283.     }
  284.     return(0);
  285. }
  286.  
  287.  
  288. //カードを1枚配る
  289. short    card_KUBARU()
  290. {
  291.     short    res;
  292.  
  293.     res=card_MOUNTAIN[card_PTR];
  294.     card_MOUNTAIN[card_PTR]=0;    //配りましたマーク
  295.     card_PTR++;
  296.     
  297.     return(res);
  298. }
  299.  
  300. //プレーヤーのカードの合計値
  301. short    card_TOTAL(ptr)
  302. short    *ptr;
  303. {
  304.     short    cn,total,num,ev=0;
  305.  
  306.     total=0;
  307.     for( cn=0; cn<5; cn++ ){
  308.         num=card_NUM(*(ptr+cn));
  309.         if( num==1 ){
  310.             ev=10;
  311.         }
  312.         total+=min(num,10);
  313.     }
  314.     if( total+10<=21 ){
  315.         total+=ev;
  316.     }
  317.     
  318.     return(total);
  319. }
  320.  
  321.  
  322.  
  323. /*
  324.     777カードチェック
  325.     777の場合=1/それ以外=0
  326. */
  327. short    card_CHECK777(ptr)
  328. short    *ptr;
  329. {
  330.     short    res=0;
  331.  
  332.     if(
  333.     card_NUM(*(ptr+0))==7 &&
  334.     card_NUM(*(ptr+1))==7 &&
  335.     card_NUM(*(ptr+2))==7 &&
  336.     card_NUM(*(ptr+3))==0
  337.     ){
  338.         res=1;
  339.     }
  340.     
  341.     return(res);
  342. }
  343.  
  344.  
  345.  
  346. /*
  347.     678カードチェック
  348.     678の場合=1/それ以外=0
  349. */
  350. short    card_CHECK678(ptr)
  351. short    *ptr;
  352. {
  353.     short    res=0,cn;
  354.     short    num[16];
  355.     
  356.     if( card_NUM(*(ptr+2)) && card_NUM(*(ptr+3))==0 ){
  357.         //カードは3枚
  358.         for( cn=0; cn<16; cn++ ){
  359.             num[cn]=0;
  360.         }
  361.         for( cn=0; cn<=2; cn++ ){
  362.             num[card_NUM(*(ptr+cn))]++;
  363.         }
  364.         if( num[6]==1 && num[7]==1 && num[8]==1 ){
  365.             res=1;
  366.         }
  367.     }
  368.     
  369.     return(res);
  370. }
  371.  
  372.  
  373.  
  374. /*
  375.     5枚のカードで21チェック
  376.     該当の場合=1/それ以外=0
  377. */
  378. short    card_CHECK5CARD21(ptr)
  379. short    *ptr;
  380. {
  381.     short    res=0;
  382.     
  383.     if( card_NUM(*(ptr+4)) ){
  384.         //カードは5枚
  385.         if( card_TOTAL(ptr)==21 ){
  386.             res=1;
  387.         }
  388.     }
  389.     
  390.     return(res);
  391. }
  392.  
  393.  
  394.  
  395. /*
  396.     どぼんする前のカードの合計値
  397. */
  398.  
  399. short    card_last_TOTAL(ptr)
  400. short    *ptr;
  401. {
  402.     short    cn,cs,total,num,ev=0;
  403.  
  404.     for( cn=0,cs=0; cn<5; cn++,cs++ ){
  405.         if( card_NUM(*(ptr+cn))==0 ){
  406.             cs--;
  407.             break;
  408.         }
  409.     }
  410.     
  411.     total=0;
  412.     for( cn=0; cn<cs; cn++ ){
  413.         num=card_NUM(*(ptr+cn));
  414.         if( num==1 ){
  415.             ev=10;
  416.         }
  417.         total+=min(num,10);
  418.     }
  419.     if( total+10<=21 ){
  420.         total+=ev;
  421.     }
  422.     
  423.     
  424.     return(total);
  425. }
  426.  
  427.  
  428.  
  429. /*
  430.     COMの思考
  431.     RES:もう1枚もらう=1以上/もらわない=0
  432. @@超暫定、といいつつ、多分このまま
  433.     今、メッチャ適当
  434.     というか、確率だけで、考えていない
  435. */
  436. short    Com_think()
  437. {
  438.     short    lv[9][4]={
  439.         // 17,18,19,20
  440.         {  94,49,24, 9},    //4割増
  441.         {  87,45,22, 8},    //3割増
  442.         {  80,41,20, 7},    //2割増
  443.         {  73,37,18, 6},    //1割増
  444.  
  445.         {  66,33,16, 5},    //基本?
  446.  
  447.         {  59,29,14, 4},    //1割減
  448.         {  52,25,12, 3},    //2割減
  449.         {  45,21,10, 2},    //3割減
  450.         {  38,17, 8, 1}        //4割減
  451.     };
  452.     short    cmp_tbl[4];
  453.     
  454.     int    res=0;
  455.     short    total,r100,klv;
  456.     
  457.     total=card_TOTAL(card_COM);
  458.     r100=rand()%100;
  459.     klv=kanjyo_HYOUKA+(rand()%3-1);        //感情評価を基準
  460.     switch( rand()%5 ){        //幅の持たせ方
  461.         case 0:    ///強い
  462.             cmp_tbl[0]=lv[klv+1][0];
  463.             cmp_tbl[1]=lv[klv][1];
  464.             cmp_tbl[2]=lv[klv-1][2];
  465.             cmp_tbl[3]=lv[klv-2][3];
  466.         break;
  467.         case 1:    ///弱い
  468.             cmp_tbl[0]=lv[klv][0];
  469.             cmp_tbl[1]=lv[klv][1];
  470.             cmp_tbl[2]=lv[klv-1][2];
  471.             cmp_tbl[3]=lv[klv-1][3];
  472.         break;
  473.         case 2:    //-
  474.             cmp_tbl[0]=lv[klv][0];
  475.             cmp_tbl[1]=lv[klv][1];
  476.             cmp_tbl[2]=lv[klv][2];
  477.             cmp_tbl[3]=lv[klv][3];
  478.         break;
  479.         case 3:    //\弱い
  480.             cmp_tbl[0]=lv[klv][0];
  481.             cmp_tbl[1]=lv[klv][1];
  482.             cmp_tbl[2]=lv[klv+1][2];
  483.             cmp_tbl[3]=lv[klv+1][3];
  484.         break;
  485.         case 4:    //\強い
  486.             cmp_tbl[0]=lv[klv-1][0];
  487.             cmp_tbl[1]=lv[klv][1];
  488.             cmp_tbl[2]=lv[klv+1][2];
  489.             cmp_tbl[3]=lv[klv+2][3];
  490.         break;
  491.     }
  492.  
  493.     if( dipSwitch&0x08 ){
  494.         printf("%d,%d,%d,%d->%d\n",
  495.         cmp_tbl[0],cmp_tbl[1],cmp_tbl[2],cmp_tbl[3],r100);
  496.     }
  497.  
  498.     if( dipSwitch&0x10 ){    //開発中の固定率を使用
  499.         klv=3;
  500.         cmp_tbl[0]=lv[klv][0];
  501.         cmp_tbl[1]=lv[klv][1];
  502.         cmp_tbl[2]=lv[klv][2];
  503.         cmp_tbl[3]=lv[klv][3];
  504.     }
  505.     
  506.     if(  0<=total && total<=16 ){        //親は、16以下では勝負出来ないらしい
  507.         res++;
  508.     }
  509.     else if( 17<=total && total<=17 ){
  510.         if( r100<cmp_tbl[0] ){
  511.             res++;
  512.         }
  513.     }
  514.     else if( 18<=total && total<=18 ){
  515.         if( r100<cmp_tbl[1] ){
  516.             res++;
  517.         }
  518.     }
  519.     else if( 19<=total && total<=19 ){
  520.         if( r100<cmp_tbl[2] ){
  521.             res++;
  522.         }
  523.     }
  524.     else if( 20<=total && total<=20 ){
  525.         if( r100<cmp_tbl[3] ){
  526.             res++;
  527.         }
  528.     }
  529.  
  530.     return(res);
  531. }
  532.  
  533.  
  534.  
  535.  
  536. /*
  537.     現在使用している感情評価判断ブロックから、感情評価値を求める
  538. */
  539. short    get_kanjyo_hyouka()
  540. {
  541.     short    kn,khlv;
  542. //    khlv=kanjyo_HANDAN_lv;
  543.     khlv=get_biorhythm();
  544.     for( kn=0; kn<=4; kn++ ){
  545. //        
  546.         if( dipSwitch & 0x40 ){
  547.             if( kanjyo_HANDAN[khlv][kn]>=kanjyo_NOW && kanjyo_NOW>=kanjyo_HANDAN[khlv][kn+1] ){
  548.                 goto quick_exit;
  549.             }
  550.         }
  551.         else{
  552.             if( kanjyo_KIAI[khlv][kn]>=kanjyo_NOW && kanjyo_NOW>=kanjyo_KIAI[khlv][kn+1] ){
  553.                 goto quick_exit;
  554. //                break;
  555.             }
  556.         }
  557.     }
  558.  
  559. quick_exit:;
  560.     return(kn);
  561. }
  562.  
  563.  
  564.  
  565. /*
  566.     感情値リミッター(+127~-128)
  567. */
  568. short    kanjyo_limit(k)
  569. short    k;
  570. {
  571.     short    res;
  572.  
  573.     res=k;
  574.     if( res>=127 ){        res=127;    }
  575.     else if( res<=-128 ){    res=-128;    }
  576.  
  577.     return(res);
  578. }
  579.  
  580.  
  581.  
  582. void    card_KUBARU_PLAYER()
  583. {
  584.     card_PLAYER[card_PLAYER_HAVE++]=card_KUBARU();
  585. }
  586.  
  587. void    card_KUBARU_COM()
  588. {
  589.     card_COM[card_COM_HAVE++]=card_KUBARU();
  590. }
  591.  
  592. void    biorhythm_FIRSTSTEP()
  593. {
  594.     biorhythm_theta=270;
  595. }
  596.  
  597. void    biorhythm_NEXTSTEP()
  598. {
  599.     biorhythm_theta+=((rand()%4)+1+rand()%(8-kanjyo_HYOUKA));
  600. }
  601.  
  602. void    kanjyo_plus_KOUSIN()
  603. {
  604.     kanjyo_NOW+=card_PLUS_KANJYO[card_COM_HAVE][card_TOTAL(card_COM)];
  605.     kanjyo_NOW=kanjyo_limit(kanjyo_NOW);
  606. }
  607.  
  608. void    kanjyo_dobon_KOUSIN()
  609. {
  610.     kanjyo_NOW+=card_LOST_KANJYO[card_last_TOTAL(card_COM)];
  611.     kanjyo_NOW=kanjyo_limit(kanjyo_NOW);
  612. }
  613.  
  614. void    kanjyo_hyouka_KOUSIN()
  615. {
  616.     kanjyo_HYOUKA=get_kanjyo_hyouka();    //感情評価判定
  617. }
  618.  
  619.  
  620. void    winlose_INIT()
  621. {
  622.     short    cn;
  623.  
  624.     winlose_COM_HISTORY[0]=-1;
  625.     for( cn=1; cn<winlose_COM_HISTORYS; cn++ ){
  626.         winlose_COM_HISTORY[cn]=0;
  627.     }
  628.     winlose_COM_COMBO=0;
  629.     winlose_COM_WIN_TOTAL=0;
  630.     winlose_COM_LOSE_TOTAL=0;
  631.     winlose_COM_DRAW_TOTAL=0;
  632.     winlose_COM_GAME_TOTAL=0;
  633. }
  634.  
  635.  
  636. void    winlose_HISTORY_KOUSIN()
  637. {
  638.     short    hn;
  639.  
  640.     for( hn=winlose_COM_HISTORYS-1; hn>=1; hn-- ){
  641.         winlose_COM_HISTORY[hn]=winlose_COM_HISTORY[hn-1];
  642.     }
  643. }
  644.  
  645. void    winlose_COMBO_COMLOSE()
  646. {
  647.     if( winlose_COM_COMBO<=0 ){
  648.         winlose_COM_COMBO--;    //連敗数更新
  649.     }
  650.     else{
  651.         winlose_COM_COMBO=0;    //連勝カウンタリセット
  652.     }
  653.     winlose_COM_LOSE_TOTAL++;
  654.     winlose_COM_HISTORY[0]=-1;
  655. }
  656.  
  657. void    winlose_COMBO_COMWIN()
  658. {
  659.     if( winlose_COM_COMBO>=0 ){
  660.         winlose_COM_COMBO++;    //連勝数更新
  661.     }
  662.     else{
  663.         winlose_COM_COMBO=0;    //連負カウンタリセット
  664.     }
  665.     winlose_COM_WIN_TOTAL++;
  666.     winlose_COM_HISTORY[0]=1;
  667. }
  668.  
  669. void    chips_INIT()
  670. {
  671.     if( dipSwitch&0x02 ){
  672.         chips_COM=98;
  673.         chips_PLAYER=2;
  674.         chips_oPLAYER=2;
  675.     }
  676.     else if( dipSwitch&0x04 ){
  677.         chips_COM=2;
  678.         chips_PLAYER=98;
  679.         chips_oPLAYER=98;
  680.     }
  681.     else{
  682.         /*
  683.         ここが標準設定
  684.         */
  685.         chips_COM=66;            //初期チップ数設定
  686.         chips_PLAYER=34;
  687.         chips_oPLAYER=34;
  688.     }
  689. }
  690.  
  691. void    chips_PLAYER_FIRSTBET()
  692. {
  693.     chips_BET=1;
  694.     chips_PLAYER-=1;
  695. }
  696.  
  697. void    chips_PLAYER_SECONDBET()
  698. {
  699.     chips_BET+=1;
  700.     chips_PLAYER-=1;
  701. }
  702.  
  703.  
  704. void    change_BGM()
  705. {
  706.     //↑
  707.     if( chips_oPLAYER<75 && 75<=chips_PLAYER ){
  708.         SOUND_CALL(BGM_GOOD);
  709.     }
  710.     if( chips_oPLAYER<25 && 25<=chips_PLAYER ){
  711.         SOUND_CALL(BGM_MAIN);
  712.     }
  713.  
  714.     //↓
  715.     if( chips_oPLAYER>75 && 75>=chips_PLAYER ){
  716.         SOUND_CALL(BGM_MAIN);
  717.     }
  718.     if( chips_oPLAYER>25 && 25>=chips_PLAYER ){
  719.         SOUND_CALL(BGM_NOTGOOD);
  720.     }
  721. }
  722.  
  723. void    chips_PLAYER_WIN()
  724. {
  725.     chips_oPLAYER=chips_PLAYER;
  726.     chips_PLAYER+=(chips_BET*2);
  727.     chips_COM-=chips_BET;
  728. }
  729.  
  730. void    chips_PLAYER_WIN2()
  731. {
  732.     chips_oPLAYER=chips_PLAYER;
  733.     chips_PLAYER+=(chips_BET*3);
  734.     chips_COM-=(chips_BET*2);
  735. }
  736.  
  737. void    chips_PLAYER_WIN3()
  738. {
  739.     chips_oPLAYER=chips_PLAYER;
  740.     chips_PLAYER+=(chips_BET*4);
  741.     chips_COM-=(chips_BET*3);
  742. }
  743.  
  744. void    chips_COM_WIN()
  745. {
  746.     chips_oPLAYER=(chips_PLAYER+chips_BET);
  747.     chips_COM+=chips_BET;
  748. }
  749.  
  750. void    chips_COM_WIN2()
  751. {
  752.     chips_oPLAYER=chips_PLAYER;
  753.     chips_COM+=(chips_BET*3);
  754.     chips_PLAYER-=(chips_BET*2);
  755. }
  756.  
  757. void    chips_COM_WIN3()
  758. {
  759.     chips_oPLAYER=chips_PLAYER;
  760.     chips_COM+=(chips_BET*4);
  761.     chips_PLAYER-=(chips_BET*3);
  762. }
  763.  
  764. void    chips_MODOSU()
  765. {
  766.     chips_oPLAYER=chips_PLAYER;
  767.     chips_PLAYER+=chips_BET;
  768. }
  769.  
  770.  
  771.  
  772. void    clr_field_PLAYER()
  773. {
  774. //    fill( 32,128,160,255,0x0e00,0xffff);    //カード部分全部
  775.     fill(155,128,161,255,0x7800,0xffff);
  776. }
  777.  
  778. void    clr_field_COM()
  779. {
  780.     fill(155,  0,161,127,0x7800,0xffff);
  781. }
  782.  
  783.  
  784. /*
  785.     カード描画
  786. */
  787. void    card_DRAW_back_COM()
  788. {
  789.     short    cn,wl=32,
  790.         wi0;
  791.     short    wi0t[]={0,0, 64,32,21,16};
  792.     clr_field_COM();
  793.     wi0=wi0t[card_COM_HAVE];
  794.     for( cn=0; cn<5; cn++ ){
  795.         if( card_COM[cn] )    TR_PUT(wl+cn*wi0,  0,0);
  796.     }
  797. }
  798.  
  799. void    card_DRAW_COM()
  800. {
  801.     short    cn,wl=32,
  802.         wi0;
  803.     short    wi0t[]={0,0, 64,32,21,16};
  804.     clr_field_COM();
  805.     wi0=wi0t[card_COM_HAVE];
  806.     for( cn=0; cn<5; cn++ ){
  807.         if( card_COM[cn] )    TR_PUT(wl+cn*wi0,  0,card_COM[cn]);
  808.     }
  809. }
  810.  
  811. void    card_DRAW_PLAYER()
  812. {
  813.     short    cn,wl=32,    //カード左隅の空白
  814.         wi0;        //カード表示間隔
  815.     short    wi0t[]={0,0, 64,32,21,16};
  816.  
  817.     clr_field_PLAYER();
  818.     wi0=wi0t[card_PLAYER_HAVE];
  819.     for( cn=0; cn<5; cn++ ){
  820.         if( card_PLAYER[cn] )    TR_PUT(wl+cn*wi0,128,card_PLAYER[cn]);    //下がPLAYER
  821.     }
  822. }
  823.  
  824. void    card_DRAW()
  825. {
  826.     short    cn,wl=32,    //カード左隅の空白
  827.         wi0;        //カード表示間隔
  828.     short    wi0t[]={0,0, 64,32,21,16};
  829.     clr_field_COM();
  830.     clr_field_PLAYER();
  831.     for( cn=0; cn<5; cn++ ){
  832.         wi0=wi0t[card_COM_HAVE];
  833.         if( card_COM[cn] )    TR_PUT(wl+cn*wi0,  0,card_COM[cn]);    //上がCOM
  834.         wi0=wi0t[card_PLAYER_HAVE];
  835.         if( card_PLAYER[cn] )    TR_PUT(wl+cn*wi0,128,card_PLAYER[cn]);    //下がPLAYER
  836.     }
  837. }
  838.  
  839. /*
  840.     小娘さん状態グラフ
  841.     (176,16)-(239,79)=(64,64),中心<239,48>
  842.  
  843. */
  844. void    graph_KOUSIN()
  845. {
  846.     static    ok,ocp=66*64/100;
  847.     short    tmp[64*64],b,y0,y1,cp;
  848.  
  849.     get(177,16,239,79,tmp,63*64*sizeof(short));
  850.     put(176,16,238,79,tmp,63*64*sizeof(short));        //グラフ左ずらし
  851.     box(175,15,240,80,0xffff,0xffff);
  852.  
  853.     line(239,16,239,79,0x7800,0xffff);    //けしけし
  854.  
  855. //    pset(239,48-kanjyo_NOW*48/128,0x07c0);            //感情値点
  856.     y0=48-ok*31/128;
  857.     y1=48-kanjyo_NOW*31/128;
  858.     line(239,y0,239,y1,0x07c0,0xffff);            //感情値線
  859.  
  860.     b=(short) (sin(biorhythm_theta*3.14/180)*31);
  861.     pset(239,48-b,0x003e);                    //バイオリズム
  862.  
  863.     cp=(chips_COM*64)/(chips_PLAYER+chips_COM);
  864.     line(239,79-ocp,239,79-cp,0x783e,0xffff);        //CHIPS
  865.     ocp=cp;
  866.  
  867.     ok=kanjyo_NOW;
  868. }
  869.  
  870.  
  871. /*
  872.     チップ数表示
  873. */
  874. void    print_chips()
  875. {
  876.     char    mes[16];
  877.     sprintf(mes,"CHIPS:%03d",chips_COM);
  878.     PrintSTR(21, 6,mes);
  879.     sprintf(mes,"CHIPS:%03d",chips_PLAYER);
  880.     PrintSTR(21,14,mes);
  881.     sprintf(mes,"BET:%02d",chips_BET);
  882.     PrintSTR(23, 7,mes);
  883.     
  884. }
  885.  
  886. void    print_gameinfo()
  887. {
  888.     short    cn;
  889.     
  890.     if( dipSwitch&0x08 ){
  891.         locate(0,0);    printf("感情値=%d",kanjyo_NOW);
  892.                 printf("/バイオリズム/th=%d/%d",get_biorhythm(),biorhythm_theta);
  893.         locate(0,1);    printf("感情評価値=%d:%s",kanjyo_HYOUKA,kanjyo_HYOUKA_STR[kanjyo_HYOUKA]);
  894.                 printf(":判断=%s",kanjyo_HANDAN_STR[kanjyo_HANDAN_lv]);
  895.         locate(0,2);    printf("PLAYER\t%d\t",card_TOTAL(card_PLAYER));
  896.                 for( cn=0; cn<5; cn++ ){ printf("%2d ",card_NUM(card_PLAYER[cn])); }
  897.         locate(0,3);    printf("COM\t%d\t",card_TOTAL(card_COM));
  898.                 for( cn=0; cn<5; cn++ ){ printf("%2d ",card_NUM(card_COM[cn])); }
  899.         locate(0,15);    printf("chips COM=%d/PL=%d/BET=%d",chips_COM,chips_PLAYER,chips_BET);
  900.         locate(0,14);    printf("Win/Lose/Draw=%d/%d/%d:",winlose_COM_WIN_TOTAL,winlose_COM_LOSE_TOTAL,winlose_COM_DRAW_TOTAL);
  901.                 if( winlose_COM_COMBO>=3 ){ printf("COM:%d連勝中",winlose_COM_COMBO); }
  902.                 else if( winlose_COM_COMBO<=-3 ){ printf("COM:%d連負中",-winlose_COM_COMBO); }
  903.         locate(0,13);    printf("chips:%d/%d",chips_oPLAYER,chips_PLAYER);
  904.         locate(0,4);
  905.     }
  906.  
  907.     graph_KOUSIN();
  908.  
  909.     card_DRAW_back_COM();
  910.     card_DRAW_PLAYER();
  911.  
  912.     print_chips();
  913.  
  914. }
  915.  
  916.  
  917. //--------------------------------------------------------------------------------------
  918. //                                    ゲーム進行
  919. //--------------------------------------------------------------------------------------
  920.  
  921.  
  922. typedef    enum    {
  923.     LS_Init0i,        LS_Init0m,    //2枚カードを配る
  924.     LS_Player0i,        LS_Player0m,    //プレーヤーの思考
  925.     LS_Bet0i,        LS_Bet0m,    //ベット(かけチップの上乗せ)
  926.     LS_Com0i,        LS_Com0m,    //COMの思考
  927.     LS_Judge0i,        LS_Judge0m,    //勝負!
  928.     LS_Wait0i,        LS_Wait0m,    //次の試合待ち
  929.     LS_GameOver0i,        LS_GameOver0m,    //ゲームオーバー
  930.     LS_GameClear0i,        LS_GameClear0m    //ゲームクリア
  931. } LS;
  932.  
  933.  
  934. /*
  935.     COM顔の種類コード
  936. */
  937. typedef    enum    {
  938. //    faceコード            名称        パターンコード
  939.     faceNULL,        //    NULL        0
  940.     faceTERE,        //    照れ(1)        1
  941.     faceMEPACHI,        //    目ぱち(3)    2,3,7
  942.     faceMEPACHI2,        //    目ぱち2(3)    4,5,7
  943.     faceUSAKO,        //    うさこ(1)    6
  944.     faceYUBISASHI,        //    指さし(2)    8,9
  945.     faceCLACKER,        //    クラッカー(3)    10,11,12
  946.     faceOOGUCHI,        //    大口(3)        13,14,15
  947.     faceTEFURI,        //    手フリ(2)    16,17
  948.     faceBIKKURIMEDAMA,    //    ビックリ目玉(3)    18,19,20
  949.     faceETTO,        //    え~っと(3)    21,22,23
  950.     faceHANAMEGANE,        //    鼻眼鏡(2)    24,25
  951.     faceKUCHIBUE,        //    口笛(2)        26,27
  952.     faceIKARI,        //    怒り(2)        28,29
  953.     faceBERO,        //    ベロ(2)        30,31
  954.     faceTAMEIKI,        //    ため息(2)    32,33
  955.     faceONEGAI,        //    お願い(2)    34,35
  956.     faceKATAME,        //    片目(2)        36,37
  957.     faceATOZUSARI,        //    あとずさり(2)    38,39
  958.     faceFUKURETTURA,    //    膨れっ面(2)    40,41
  959.     faceEHE,        //    えへ(2)        42,43
  960.     faceGYO,        //    ぎょ(2)        44,45
  961.     faceYOKONIKO,        //    横ニコ(2)    46,47
  962.     faceMEHABANAMIDA,    //    目幅涙(4)    48,49,50,51
  963.     facePERORI,        //    ペロリ(4)    52,53,54,55
  964.     faceBIMYO        //    微妙(4)        56,57,58,59
  965. } FACE;
  966.  
  967.  
  968. /*
  969.     COM顔コードに対応する、スプライトドライバ用パターン(disp0_anim)番号
  970. */
  971. //charはまずい:奇数アドレスにアライメントされる
  972. short    facePAT[faceBIMYO+1][4]={
  973.     {0,0,0,0    },    //faceNULL,        NULL        
  974.     {1,0,0,0    },    //faceTERE,        照れ(1)        
  975.     {2,3,7,0    },    //faceMEPACHI,        目ぱち(3)    
  976.     {4,5,7,0    },    //faceMEPACHI2,        目ぱち2(3)    
  977.     {6,0,0,0    },    //faceUSAKO,        うさこ(1)    
  978.     {8,9,0,0    },    //faceYUBISASHI,    指さし(2)    
  979.     {10,11,12,0    },    //faceCLACKER,        クラッカー(3)    
  980.     {13,14,15,0    },    //faceOOGUCHI,        大口(3)        
  981.     {16,17,0,0    },    //faceTEFURI,        手フリ(2)    
  982.     {18,19,20,0    },    //faceBIKKURIMEDAMA,    ビックリ目玉(3)    
  983.     {21,22,23,0    },    //faceETTO,        え~っと(3)    
  984.     {24,25,0,0    },    //faceHANAMEGANE,    鼻眼鏡(2)    
  985.     {26,27,0,0    },    //faceKUCHIBUE,        口笛(2)        
  986.     {28,29,0,0    },    //faceIKARI,        怒り(2)        
  987.     {30,31,0,0    },    //faceBERO,        ベロ(2)        
  988.     {32,33,0,0    },    //faceTAMEIKI,        ため息(2)    
  989.     {34,35,0,0    },    //faceONEGAI,        お願い(2)    
  990.     {36,37,0,0    },    //faceKATAME,        片目(2)        
  991.     {38,39,0,0    },    //faceATOZUSARI,    あとずさり(2)    
  992.     {40,41,0,0    },    //faceFUKURETTURA,    膨れっ面(2)    
  993.     {42,43,0,0    },    //faceEHE,        えへ(2)        
  994.     {44,45,0,0    },    //faceGYO,        ぎょ(2)        
  995.     {46,47,0,0    },    //faceYOKONIKO,        横ニコ(2)    
  996.     {48,49,50,51    },    //faceMEHABANAMIDA,    目幅涙(4)    
  997.     {52,53,54,55    },    //facePERORI,        ペロリ(4)    
  998.     {56,57,58,59    },    //faceBIMYO        微妙(4)        
  999. };
  1000.  
  1001.  
  1002.  
  1003. /*
  1004.     COM顔パターンコードの名前
  1005. */
  1006. char    *faceNAME[faceBIMYO+1]={
  1007.     "(NULL)",    //faceNULL,
  1008.     "照れ",        //faceTERE,
  1009.     "目ぱち",    //faceMEPACHI,        
  1010.     "目ぱち2",    //faceMEPACHI2,        
  1011.     "うさこ",    //faceUSAKO,        
  1012.     "指さし",    //faceYUBISASHI,    
  1013.     "クラッカー",    //faceCLACKER,        
  1014.     "大口",        //faceOOGUCHI,        
  1015.     "手フリ",    //faceTEFURI,        
  1016.     "ビックリ目玉",    //faceBIKKURIMEDAMA,    
  1017.     "え~っと",    //faceETTO,        
  1018.     "鼻眼鏡",    //faceHANAMEGANE,    
  1019.     "口笛",        //faceKUCHIBUE,        
  1020.     "怒り",        //faceIKARI,        
  1021.     "ベロ",        //faceBERO,        
  1022.     "ため息",    //faceTAMEIKI,        
  1023.     "お願い",    //faceONEGAI,        
  1024.     "片目",        //faceKATAME,        
  1025.     "あとずさり",    //faceATOZUSARI,    
  1026.     "膨れっ面",    //faceFUKURETTURA,    
  1027.     "えへ",        //faceEHE,        
  1028.     "ぎょ",        //faceGYO,        
  1029.     "横ニコ",    //faceYOKONIKO,        
  1030.     "目幅涙",    //faceMEHABANAMIDA,    
  1031.     "ペロリ",    //facePERORI,        
  1032.     "微妙",        //faceBIMYO        
  1033. };
  1034.  
  1035.  
  1036.  
  1037.  
  1038. /*
  1039.     キャラクターチェック用管理タスク
  1040.     COM顔をならべるだけ
  1041. */
  1042. int    CHRTEST000_JOB(t)
  1043. TASK    *t;
  1044. {
  1045.     int    en;
  1046.     TASK    *eTask;
  1047.     int    mx,my,bx,by;
  1048.  
  1049.     if( t->local_counter==0 ){
  1050. //        screen(0,3,1,1);
  1051.         HOME(0,256,0);
  1052.         for( en=0; en<=faceBIMYO; en++ ){
  1053.             eTask=ETaskAlloc();
  1054.             if( eTask ){
  1055.                 eTask->func_addr=ENEMY000_JOB;
  1056.                 eTask->disp0_addr=MUS0;
  1057.                 eTask->disp0_x=((en%6)*40+20)<<16;
  1058.                 eTask->disp0_y=((en/6)*40+20)<<16;
  1059.                 eTask->task_command=en;
  1060.             }
  1061.         }
  1062.         MS_CURON();
  1063.     }
  1064.  
  1065.     /*マウス動いたら
  1066.     */
  1067.     if( oDev.mx!=Dev.mx || oDev.my!=Dev.my ){
  1068.         mx=Dev.mx;
  1069.         my=Dev.my;
  1070.         for( en=0; en<=faceBIMYO; en++ ){
  1071.             bx=(en%6)*40+20;
  1072.             by=(en/6)*40+20;
  1073.             if( mx-16<bx && bx<mx+16 && my-16<by && by<my+16 ){
  1074.                 locate(0,15);    printf("        ");
  1075.                 locate(0,15);    printf(faceNAME[en]);
  1076.             }
  1077.         }
  1078.     }
  1079.     
  1080.     
  1081.     if( sDev.kb[0]==0x02 ){
  1082.         gameStep=STEP_EXIT;
  1083.     }
  1084.  
  1085.  
  1086. }
  1087.  
  1088.  
  1089.  
  1090. /*
  1091.     次のCOM顔の顔コードを返す
  1092. */
  1093. short    com_newface()
  1094. {
  1095.     short    res;
  1096.     short    r100=rand()%100;
  1097.  
  1098.     /*
  1099.         連勝中
  1100.     */
  1101.     if( winlose_COM_COMBO>=5 ){ ; switch( kanjyo_HYOUKA ){
  1102.         //5連勝以上
  1103.         case 0:
  1104.         case 1:    res=faceHANAMEGANE;    break;
  1105.         case 2:    res=faceBIKKURIMEDAMA;    break;
  1106.         case 3:    res=faceYOKONIKO;    break;
  1107.         case 4:    res=faceGYO;        break;
  1108.     }}
  1109.     if( winlose_COM_COMBO>=3 ){ ; switch( kanjyo_HYOUKA ){
  1110.         //3連勝以上
  1111.         case 0:    res=faceHANAMEGANE;    break;
  1112.         case 1:    res=faceBIKKURIMEDAMA;    break;
  1113.         case 2:    res=faceYOKONIKO;    break;
  1114.         case 3:    res=faceGYO;        break;
  1115.         case 4:    res=faceTERE;        break;
  1116.     }}
  1117.  
  1118.     /*
  1119.         連敗中
  1120.     */
  1121.     else if( winlose_COM_COMBO<=-4 ){ ; switch( kanjyo_HYOUKA ){
  1122.         //4連負け以上
  1123.         //負け続けると、ちょっと傾向がかわる
  1124.         case 0:    res=faceBERO;                    break;
  1125.         case 1:    res=faceOOGUCHI;                break;
  1126.         case 2:    res=(r100<50)?faceKATAME:faceMEHABANAMIDA;    break;
  1127.         case 3:    res=(r100<50)?faceATOZUSARI:faceCLACKER;    break;
  1128.         case 4:    res=(r100<50)?faceYUBISASHI:faceCLACKER;    break;
  1129.     }}
  1130.     else if( winlose_COM_COMBO<=-2 ){ ; switch( kanjyo_HYOUKA ){
  1131.         //2連負け以上
  1132.         case 0:    res=faceFUKURETTURA;    break;
  1133.         case 1:    res=faceBERO;        break;
  1134.         case 2:    res=faceOOGUCHI;    break;
  1135.         case 3:    res=faceMEHABANAMIDA;    break;
  1136.         case 4:    res=faceCLACKER;        break;
  1137.     }}
  1138.  
  1139.     /*
  1140.         通常
  1141.     */
  1142.     else{
  1143.         switch( kanjyo_HYOUKA ){
  1144.             //通常
  1145.             case 0:    res=faceEHE;        break;
  1146.             case 1:    res=facePERORI;        break;
  1147.             case 2:    res=faceMEPACHI;    break;
  1148.             case 3:    res=faceMEPACHI2;    break;
  1149.             case 4:    res=faceUSAKO;        break;
  1150.         }
  1151.         if( r100<12 ){ ; switch( kanjyo_HYOUKA ){
  1152.         //たまに表情をかえてみる
  1153.         //手はよく振る・やっぱり調子が悪いとため息なんかついたり、怒ったりする
  1154.             case 0:    res=faceBIMYO;    break;
  1155.             case 1:    res=(r100<10)?faceTEFURI:faceBIMYO;        break;
  1156.             case 2:    res=(r100<10)?faceTEFURI:faceKUCHIBUE;    break;
  1157.             case 3:    res=(r100<10)?faceTAMEIKI:faceONEGAI;    break;
  1158.             case 4:    res=(r100<10)?faceTAMEIKI:faceIKARI;    break;
  1159.         }}
  1160.         //状態にかかわらず、たまに変な顔になる
  1161.         if( r100<2 ){
  1162.             res=faceETTO;
  1163.         }
  1164.     }
  1165.  
  1166.     return(res);
  1167. }
  1168.  
  1169.  
  1170.  
  1171.  
  1172. /*
  1173.     COM:task_commandから入ってきた表情から、勝手にアニメを展開
  1174. */
  1175.  
  1176. //ワークの使用状況
  1177. #define        MEPACHI_FLAG        (t->work[0])
  1178. #define        ANIM_LEFT        (t->work[1])
  1179.  
  1180. #define        BOUND_FLAG        (t->work[2])    //ほうりなげフラグ?
  1181. #define        BOUND_VX        (*(int *) (&t->work[4]))    //現在X速度
  1182. #define        BOUND_VY        (*(int *) (&t->work[6]))    //  Y速度
  1183.  
  1184. #define        BOUND_G            (0x10000)        //重力加速度
  1185.  
  1186.  
  1187. int    ENEMY000_JOB(t)
  1188. TASK    *t;
  1189. {
  1190.     SPINFO    *s;
  1191.  
  1192.     char    tc;    //=task_command
  1193.  
  1194.     s=t->disp0_addr;
  1195.     tc=t->task_command;
  1196.  
  1197.     /*
  1198.         初期設定
  1199.     */
  1200.     if( t->local_counter==0 ){
  1201.         if( BOUND_FLAG ){
  1202.             t->disp0_x=(rand()%128+192)<<16;
  1203.             t->disp0_y=(-16)<<16;
  1204.             BOUND_VX=((rand()%24+1)<<14)/2*3;
  1205.             BOUND_VY=BOUND_G;
  1206.         }
  1207.     }
  1208.  
  1209.  
  1210.     /*
  1211.         バウンドアニメ
  1212.     */
  1213.     if( BOUND_FLAG ){
  1214.         t->disp0_x-=BOUND_VX;
  1215.         BOUND_VY+=BOUND_G;
  1216.         t->disp0_y+=BOUND_VY;
  1217.         if( t->disp0_y>(240<<16) ){    //跳ね返り位置(下辺)
  1218.             t->disp0_y=(240<<16);
  1219.             BOUND_VY=-(BOUND_VY*15/16);
  1220.         }
  1221.         //跳ね返り
  1222.         if( t->disp0_x<=(16)<<16 ){
  1223.             BOUND_VX=-BOUND_VX;
  1224.         }
  1225.         //終了判定
  1226.         if( t->disp0_x>=(320)<<16 ){
  1227.             ETaskFree(t);
  1228.             goto quick_exit;
  1229.         }
  1230.     }
  1231.  
  1232.  
  1233.     /*
  1234.         アニメ関連
  1235.     */
  1236.     switch( t->task_command ){
  1237.  
  1238.         /*
  1239.             アニメ無し組
  1240.         */
  1241.         case faceNULL:
  1242.         case faceTERE:
  1243.         case faceUSAKO:
  1244.             t->disp0_anim=facePAT[tc][0];
  1245.         break;
  1246.  
  1247.         /*
  1248.             めぱち組
  1249.         */
  1250.         case faceMEPACHI:
  1251.         case faceMEPACHI2:
  1252.             if( MEPACHI_FLAG==1 ){ ; switch( t->local_counter%30 ){
  1253.                 case  0: t->disp0_anim=facePAT[tc][0]; break;    //実は呼ばれない
  1254.                 case  8: t->disp0_anim=facePAT[tc][1]; break;
  1255.                 case 15: t->disp0_anim=facePAT[tc][2]; break;
  1256.                 case 22: t->disp0_anim=facePAT[tc][0]; break;
  1257.                 case 29: MEPACHI_FLAG=0; break;
  1258.             }}
  1259.             else{
  1260.                 t->disp0_anim=facePAT[tc][0];
  1261.                 if( (t->local_counter%30)==0 ){
  1262.                     if( (rand()%20)>15 ){
  1263.                         MEPACHI_FLAG=1;
  1264.                     }
  1265.                 }
  1266.             }
  1267.         break;
  1268.  
  1269.         /*
  1270.             インターバル固定2枚組
  1271.         */
  1272.         case faceTEFURI:
  1273.         case faceYUBISASHI:
  1274.         case faceKUCHIBUE:
  1275.         case faceIKARI:
  1276.         case faceONEGAI:
  1277.         case faceFUKURETTURA:
  1278.         case faceYOKONIKO:
  1279.             if( (t->local_counter%60)<30 ){
  1280.                 t->disp0_anim=facePAT[tc][0];
  1281.             }
  1282.             else{
  1283.                 t->disp0_anim=facePAT[tc][1];
  1284.             }
  1285.         break;
  1286.  
  1287.  
  1288.         /*
  1289.             ランダムインターバル2枚組
  1290.         */
  1291.         case faceHANAMEGANE:
  1292.         case faceBERO:
  1293.         case faceTAMEIKI:
  1294.         case faceKATAME:
  1295.         case faceATOZUSARI:
  1296.         case faceEHE:
  1297.         case faceGYO:
  1298.             if( ANIM_LEFT>0 ){
  1299.                 t->disp0_anim=facePAT[tc][MEPACHI_FLAG];
  1300.                 ANIM_LEFT--;
  1301.             }
  1302.             else{
  1303.                 ANIM_LEFT=(rand()%8+4)*4;
  1304.                 MEPACHI_FLAG=(MEPACHI_FLAG==0)?1:0;
  1305.             }
  1306.         break;
  1307.  
  1308.  
  1309.         /*
  1310.             ペロリ
  1311.             MEPACHI_FLAG==1    左→右
  1312.             MEPACHI_FLAG==2    左←右
  1313.         */
  1314.         case facePERORI:
  1315.             if( MEPACHI_FLAG>0 ){
  1316.                 char    dir[3][4]={
  1317.                     {0,0,0,0},
  1318.                     {3,2,1,0},
  1319.                     {3,0,1,2}
  1320.                 };
  1321.                 switch( t->local_counter%30 ){
  1322.                     case  0: t->disp0_anim=facePAT[tc][dir[MEPACHI_FLAG][0]]; break;    //実は呼ばれない
  1323.                     case  8: t->disp0_anim=facePAT[tc][dir[MEPACHI_FLAG][1]]; break;
  1324.                     case 15: t->disp0_anim=facePAT[tc][dir[MEPACHI_FLAG][2]]; break;
  1325.                     case 22: t->disp0_anim=facePAT[tc][dir[MEPACHI_FLAG][3]]; break;
  1326.                     case 29: MEPACHI_FLAG=0; break;
  1327.                 }
  1328.             }
  1329.             else{
  1330.                 t->disp0_anim=facePAT[tc][3];
  1331.                 if( (t->local_counter%30)==0 ){
  1332.                     switch( rand()%20 ){
  1333.                         case 19: MEPACHI_FLAG=1; break;
  1334.                         case 18: MEPACHI_FLAG=2; break;
  1335.                     }
  1336.                 }
  1337.             }
  1338.         break;
  1339.  
  1340.         /*
  1341.             順序関係無し3枚組
  1342.         */
  1343.         case faceOOGUCHI:
  1344.         case faceBIKKURIMEDAMA:
  1345.         case faceETTO:
  1346.             if( (t->local_counter%30)==0 ){
  1347.                 t->disp0_anim=facePAT[tc][rand()%3];
  1348.             }
  1349.         break;
  1350.  
  1351.         /*
  1352.             順序関係無し3枚組:サイクル速く
  1353.         */
  1354.         case faceCLACKER:
  1355.             if( (t->local_counter%6)==0 ){
  1356.                 t->disp0_anim=facePAT[tc][rand()%3];
  1357.             }
  1358.         break;
  1359.  
  1360.         /*
  1361.             順序関係無し4枚組
  1362.         */
  1363.         case faceBIMYO:
  1364.             if( (t->local_counter%30)==0 ){
  1365.                 t->disp0_anim=facePAT[tc][rand()%4];
  1366.             }
  1367.         break;
  1368.  
  1369.         /*
  1370.             目幅なみだ:たまにしか途切れない
  1371.         */
  1372.         case faceMEHABANAMIDA:
  1373.             if( (t->local_counter%3)==0 ){
  1374.                 char    n;
  1375.                 n=rand()%32;
  1376.                 if( n!=0 ){ n=(n%3)+1; }
  1377.                 t->disp0_anim=facePAT[tc][n];
  1378.             }
  1379.         break;
  1380.     }
  1381.  
  1382.     /*
  1383.         アニメ強制OFF?
  1384.     */
  1385.     if( dipSwitch&0x20 ){
  1386.         t->disp0_anim=facePAT[tc][0];
  1387.     }
  1388.  
  1389.  
  1390. quick_exit:
  1391.     return(0);
  1392. }
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398. /*
  1399.     ゲーム中のダイアログ?というよりボタン
  1400. */
  1401. typedef    enum    {
  1402.     bottonMORECARD,
  1403.     bottonMOREBET,
  1404.     bottonYOUWIN,
  1405.     bottonYOULOSE,
  1406.     bottonYOUWIN2,
  1407.     bottonYOULOSE2,
  1408.     bottonYOUWIN3,
  1409.     bottonYOULOSE3,
  1410. } DN;
  1411.  
  1412. short    bottonBuf[8][2992];    //max(68*44,100*20)
  1413.  
  1414. void    get_botton_ALL()
  1415. {
  1416.     short    sx,sy,wx,wy,dn;
  1417.  
  1418.     sx=64; sy=0; wx=68; wy=44; dn=bottonMORECARD;
  1419.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1420.  
  1421.     sy=48; dn=bottonMOREBET;
  1422.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1423.  
  1424.     sy=96; wx=100; wy=20; dn=bottonYOUWIN;
  1425.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1426.     sy=120; dn=bottonYOULOSE;
  1427.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1428.  
  1429.     sy=144; dn=bottonYOUWIN2;
  1430.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1431.     sy=168; dn=bottonYOULOSE2;
  1432.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1433.  
  1434.     sy=192; dn=bottonYOUWIN3;
  1435.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1436.     sy=216; dn=bottonYOULOSE3;
  1437.     get(sx,sy,sx+wx-1,sy+wy-1,bottonBuf[dn],wx*wy*sizeof(short));
  1438. }
  1439.  
  1440. void    put_botton(dn)
  1441. short    dn;
  1442. {
  1443.     short    sx[]={176,176,48,48,48,48,48,48},
  1444.         sy[]={144,144,108,128,108,128,108,128},
  1445.         wx[]={68,68,100,100,100,100,100,100},
  1446.         wy[]={44,44,20,20,20,20,20,20};
  1447.  
  1448.     put(sx[dn],sy[dn],sx[dn]+wx[dn]-1,sy[dn]+wy[dn]-1,
  1449.     bottonBuf[dn],wx[dn]*wy[dn]*sizeof(short));
  1450. }
  1451.  
  1452. void    put_botton_CLOSE()
  1453. {
  1454.     short    x=160,y=144;
  1455.     fill(x,y,x+96-1,y+64-1,0x7800,0xffff);
  1456. }
  1457.  
  1458.  
  1459. /*
  1460.     ボタンをクリックしたか
  1461.     0=していない
  1462.     1=上のダイアログをクリック
  1463.     2=下のダイアログをクリック
  1464. */
  1465. short    on_botton_MORECARD(mx,my)
  1466. int    mx,my;
  1467. {
  1468.     short    res=0;
  1469.     short    x=176,y=144,y2=166,wx=72,wy=20;
  1470.  
  1471.     if( x<=mx && mx<=(x+wx-1) ){
  1472.         if( y<=my && my<=(y+wy-1) ){
  1473.             res=1;
  1474.         }
  1475.         else if( y2<=my && my<=(y2+wy-1) ){
  1476.             res=2;
  1477.         }
  1478.     }
  1479.  
  1480.     return(res);
  1481. }
  1482.  
  1483.  
  1484. #define    on_botton_MOREBET(mx,my)    on_botton_MORECARD(mx,my)
  1485.  
  1486.  
  1487. /*
  1488.     ステージ進行管理タスク:複数起動不可
  1489. */
  1490. short    stageNumber;        //ステージ番号0~3
  1491. short    dispWait_COM;        //COMの操作表示時におけるwait
  1492.  
  1493.  
  1494. TASK    *PLAYERADR;        //プレイヤーのタスクワークアドレス
  1495. TASK    *ENEMYADR;        //敵(COM)のタスクワークアドレス
  1496. int    STAGE000_JOB(t)
  1497. TASK    *t;
  1498. {
  1499.     /*
  1500.         初期設定
  1501.     */
  1502.     if( t->local_counter==0 ){
  1503.         TASK    *eTask;
  1504.         
  1505.         SOUND_CALL(BGM_MAIN);
  1506. //        VPAGE(0);
  1507.         {
  1508.             unsigned short *s,*d;
  1509.             s=0xC40000;
  1510.             d=0xC00000;
  1511.             while( d<0xC40000 ){
  1512.                 *d++=*s++;
  1513.             }
  1514.         }
  1515. //        VPAGE(0x0f);
  1516. //        CRTMOD(270);
  1517.         TNUM__SetPalet();
  1518.         MS_CURON();
  1519.         get_botton_ALL();
  1520.         fill(33,0,164,255,0x7800,0xffff);
  1521.         
  1522.         sp_disp(1);
  1523.         sp_on(0,127);
  1524.         v_priority("TSG","0123");
  1525.         
  1526.         eTask=ETaskAlloc();    //COM
  1527.         if( eTask ){
  1528.             ENEMYADR=eTask;
  1529.             eTask->func_addr=ENEMY000_JOB;
  1530.             eTask->disp0_addr=MUS0;
  1531.             eTask->disp0_anim=1;
  1532.             eTask->disp0_x= 16<<16;        //208<<16;
  1533.             eTask->disp0_y=111<<16;        // 64<<16;
  1534.         }
  1535.         eTask=ETaskAlloc();    //PLAYER
  1536.         if( eTask ){
  1537.             PLAYERADR=eTask;
  1538.             eTask->func_addr=ENEMY000_JOB;
  1539.             eTask->disp0_addr=MUS0;
  1540.             eTask->disp0_anim=0;
  1541.             eTask->disp0_x= 16<<16;        //208<<16;
  1542.             eTask->disp0_y=144<<16;        //172<<16;
  1543.         }
  1544.         t->local_step=LS_Init0i;
  1545.         biorhythm_FIRSTSTEP();
  1546.         chips_INIT();
  1547.         winlose_INIT();
  1548.     }
  1549.  
  1550.  
  1551.     /*
  1552.         表示ウェイト関係
  1553.     */
  1554.     if( dispWait_COM>0 ){
  1555.         dispWait_COM--;        //表示待ち
  1556.         goto quick_exit;
  1557.     }
  1558.  
  1559.  
  1560.  
  1561.     /*
  1562.         カードシャッフルして配る
  1563.     */
  1564.     if( t->local_step==LS_Init0i ){
  1565.         card_PLAYER_HAVE=0;
  1566.         card_COM_HAVE=0;
  1567.         card_SHUF();
  1568.         card_KUBARU_PLAYER();
  1569.         card_KUBARU_COM();
  1570.         card_KUBARU_PLAYER();
  1571.         card_KUBARU_COM();
  1572.         biorhythm_NEXTSTEP();
  1573.         chips_PLAYER_FIRSTBET();
  1574.         SOUND_CALL(SE_KACHI);
  1575.     }
  1576.  
  1577.  
  1578.     /*
  1579.         最初の2枚を配った時点による
  1580.         むすめさんの感情値/感情評価値/表情、を更新
  1581.     */
  1582.     if( t->local_step==LS_Init0i ){
  1583.         kanjyo_plus_KOUSIN();
  1584.         kanjyo_hyouka_KOUSIN();
  1585.         ENEMYADR->task_command=com_newface();    //表情更新
  1586.     }
  1587.  
  1588.  
  1589.     /*
  1590.         現在のいろんな情報をまとめて表示
  1591.     */
  1592.     if(
  1593.     t->local_step==LS_Init0i ||
  1594.     t->local_step==LS_Player0i ||
  1595.     t->local_step==LS_Com0i
  1596.     ){
  1597. //        cls();
  1598.         print_gameinfo();
  1599.     }
  1600.  
  1601.  
  1602.     /*
  1603.         プレーヤー思考?
  1604.     */
  1605.     if( t->local_step==LS_Player0i ){
  1606.         put_botton(bottonMORECARD);
  1607. //        printf("カードを1枚もらう→ L-click\n");
  1608. //        printf("これで勝負→ R-click\n");
  1609.         t->local_step=LS_Player0m;
  1610.     }
  1611.     else if( t->local_step==LS_Player0m && sDev.mbl==-1 ){
  1612.         if( on_botton_MORECARD(Dev.mx,Dev.my)==2 ){
  1613.             //もう1枚もらう
  1614.             card_KUBARU_PLAYER();
  1615.             card_DRAW_PLAYER();
  1616.             SOUND_CALL(SE_CARD_KUBARU);
  1617.             {
  1618.                 short    pl;
  1619.                 pl=card_TOTAL(card_PLAYER);
  1620.                 if( pl>21 ){
  1621.                     //実はどぼんしていた
  1622.                     t->local_step=LS_Judge0i;
  1623.                     print_gameinfo();
  1624.                     goto end_playerturn;
  1625.                 }
  1626.                 else{
  1627.                     t->local_step=LS_Player0i;
  1628.                 }
  1629.             }
  1630.             if( card_PLAYER_HAVE==5 ){
  1631.                 //手札がいっぱい(5枚)になった
  1632.                 t->local_step=LS_Bet0i;
  1633.             }
  1634.         }
  1635.         else if( on_botton_MORECARD(Dev.mx,Dev.my)==1 ){
  1636.             //これで勝負
  1637.             t->local_step=LS_Bet0i;
  1638.         }
  1639.     }
  1640. end_playerturn:
  1641.     ;
  1642.  
  1643.  
  1644.  
  1645.     /*
  1646.         賭けチップの上乗せ
  1647.     */
  1648.     if( t->local_step==LS_Bet0i ){
  1649.         SOUND_CALL(SE_CARD_MEKURU);
  1650.         put_botton(bottonMOREBET);
  1651. //        printf("L-click:追加チップ+1/R-click:勝負に!");
  1652.         t->local_step=LS_Bet0m;
  1653.     }
  1654.     else if( t->local_step==LS_Bet0m && sDev.mbl==-1 ){
  1655.         if( on_botton_MOREBET(Dev.mx,Dev.my)==1 ){
  1656.             //もう1枚かける
  1657.             chips_PLAYER_SECONDBET();
  1658.             SOUND_CALL(SE_BET_UP);
  1659.             print_chips();
  1660.             if( chips_BET>=10 ){    //一度に10枚以上かけられない
  1661.                 put_botton_CLOSE();
  1662.                 t->local_step=LS_Com0i;
  1663.             }
  1664.         }
  1665.         else if( on_botton_MOREBET(Dev.mx,Dev.my)==2 ){
  1666.             //これで勝負
  1667.             t->local_step=LS_Com0i;
  1668.         }
  1669.         if( t->local_step==LS_Com0i ){
  1670.             SOUND_CALL(SE_CARD_MEKURU);
  1671.         }
  1672.     }
  1673.  
  1674.  
  1675.  
  1676.     /*
  1677.         COM思考
  1678.     */
  1679.     if( t->local_step==LS_Com0i ){
  1680. //        printf("COM思考中");
  1681.         
  1682.         t->local_step=LS_Com0m;
  1683.         dispWait_COM=30;        //1/2秒
  1684.     }
  1685.     else if( t->local_step==LS_Com0m ){
  1686.         if( Com_think()>0 ){
  1687.             //COMもう1枚もらう
  1688.             card_KUBARU_COM();
  1689. //            card_DRAW();
  1690.             card_DRAW_back_COM();
  1691.             SOUND_CALL(SE_CARD_KUBARU);
  1692.             if( card_TOTAL(card_COM)>21 ){    //どぼんした時の感情値更新
  1693.                 kanjyo_dobon_KOUSIN();
  1694.                 t->local_step=LS_Judge0i;
  1695.                 goto end_comturn;
  1696.             }
  1697.             else{
  1698.                 kanjyo_plus_KOUSIN();
  1699.             }
  1700.             kanjyo_hyouka_KOUSIN();
  1701.             if( card_COM_HAVE==5 ){
  1702.                 //手札がいっぱい(5枚)になった
  1703.                 t->local_step=LS_Judge0i;
  1704.                 goto end_comturn;
  1705.             }
  1706.             t->local_step=LS_Com0i;
  1707.         }
  1708.         else{
  1709.             //COMこれで勝負
  1710.             t->local_step=LS_Judge0i;
  1711.             dispWait_COM=30;        //1/2秒
  1712.         }
  1713.     }
  1714. end_comturn:
  1715.     ;
  1716.  
  1717.  
  1718.     /*
  1719.         勝ち負け判定
  1720.     */
  1721.     if( t->local_step==LS_Judge0i ){
  1722.         card_DRAW();
  1723.         SOUND_CALL(SE_CARD_MEKURU);
  1724. //        printf("勝負判定:");
  1725.         t->local_step=LS_Judge0m;
  1726.     }
  1727.     else if( t->local_step==LS_Judge0m ){
  1728.         short    pl,com;
  1729.  
  1730.         winlose_COM_HISTORY[0]=0;
  1731.         /*
  1732.             特殊ボーナスチェック
  1733.         */
  1734.         if( card_CHECK777(card_PLAYER) ){
  1735.             /*
  1736.             プレーヤー777ビンゴ
  1737.             */
  1738. //            printf("PLAYERの「777」3倍勝ち");
  1739.             put_botton(bottonYOUWIN3);
  1740.             kanjyo_NOW+=bounus_LOSE[card_PLAYER_HAVE][card_COM_HAVE];
  1741.             chips_PLAYER_WIN3();        //3倍勝ち
  1742.             winlose_COMBO_COMLOSE();
  1743.             goto judge_end;
  1744.         }
  1745.         if( card_CHECK777(card_COM) ){
  1746.             /*
  1747.             COM777ビンゴ
  1748.             */
  1749. //            printf("COMの「777」3倍勝ち");
  1750.             put_botton(bottonYOULOSE3);
  1751.             kanjyo_NOW+=bounus_WIN[card_PLAYER_HAVE][card_COM_HAVE];
  1752.             chips_COM_WIN3();
  1753.             winlose_COMBO_COMWIN();
  1754.             goto judge_end;
  1755.         }
  1756.         if( card_CHECK678(card_PLAYER) ){
  1757.             /*
  1758.             プレーヤー678ビンゴ
  1759.             */
  1760. //            printf("PLAYERの「678」2倍勝ち");
  1761.             put_botton(bottonYOUWIN2);
  1762.             kanjyo_NOW+=bounus_LOSE[card_PLAYER_HAVE][card_COM_HAVE];
  1763.             chips_PLAYER_WIN2();        //2倍勝ち
  1764.             winlose_COMBO_COMLOSE();
  1765.             goto judge_end;
  1766.         }
  1767.         if( card_CHECK678(card_COM) ){
  1768.             /*
  1769.             COM678ビンゴ
  1770.             */
  1771. //            printf("COMの「678」2倍勝ち");
  1772.             put_botton(bottonYOULOSE2);
  1773.             kanjyo_NOW+=bounus_WIN[card_PLAYER_HAVE][card_COM_HAVE];
  1774.             chips_COM_WIN2();
  1775.             winlose_COMBO_COMWIN();
  1776.             goto judge_end;
  1777.         }
  1778.         if( card_CHECK5CARD21(card_PLAYER) ){
  1779.             /*
  1780.             プレーヤー5枚21ビンゴ
  1781.             */
  1782. //            printf("PLAYERの「5枚21」3倍勝ち");
  1783.             put_botton(bottonYOUWIN3);
  1784.             kanjyo_NOW+=bounus_LOSE[card_PLAYER_HAVE][card_COM_HAVE];
  1785.             chips_PLAYER_WIN3();        //3倍勝ち
  1786.             winlose_COMBO_COMLOSE();
  1787.             goto judge_end;
  1788.         }
  1789.         if( card_CHECK5CARD21(card_COM) ){
  1790.             /*
  1791.             COM5枚21ビンゴ
  1792.             */
  1793. //            printf("COMの「5枚21」3倍勝ち");
  1794.             put_botton(bottonYOULOSE3);
  1795.             kanjyo_NOW+=bounus_WIN[card_PLAYER_HAVE][card_COM_HAVE];
  1796.             chips_COM_WIN3();
  1797.             winlose_COMBO_COMWIN();
  1798.             goto judge_end;
  1799.         }
  1800.  
  1801.         /*
  1802.             通常チェック
  1803.         */
  1804.         pl=card_TOTAL(card_PLAYER);
  1805.         com=card_TOTAL(card_COM);
  1806.         if( pl>21 && com>21 ){
  1807.             /*
  1808.                 PLAYERもCOMもドボン
  1809.             */
  1810. //            printf("おながれ");
  1811.             chips_MODOSU();
  1812.             winlose_COM_DRAW_TOTAL++;
  1813.         }
  1814.         else if( pl==21 && com==21 ){
  1815.             /*
  1816.                 PLAYERもCOMも21の場合は、PLAYERの2倍勝ち
  1817.             */
  1818. //            printf("PLAYERの2倍勝ち");
  1819.             put_botton(bottonYOUWIN2);
  1820.             kanjyo_NOW+=bounus_LOSE[card_PLAYER_HAVE][card_COM_HAVE];    //COMにとって負け
  1821.             chips_PLAYER_WIN2();        //2倍勝ち
  1822.             winlose_COMBO_COMLOSE();
  1823.         }
  1824.         else if( pl!=21 && com==21 ){
  1825.             /*
  1826.                 COMだけ21の場合は、COMの2倍勝ち
  1827.             */
  1828. //            printf("COMの2倍勝ち");
  1829.             put_botton(bottonYOULOSE2);
  1830.             kanjyo_NOW+=bounus_WIN[card_PLAYER_HAVE][card_COM_HAVE];
  1831.             chips_COM_WIN2();
  1832.             winlose_COMBO_COMWIN();
  1833.         }
  1834.         else if( (pl>com && pl<=21) || com>21 ){
  1835.             /*
  1836.                 PLAYERがCOMより大きく、PLAYERは21以下。
  1837.                 もしくは、COMドボン
  1838.             */
  1839. //            printf("PLAYERの勝ち");
  1840.             put_botton(bottonYOUWIN);
  1841.             kanjyo_NOW+=bounus_LOSE[card_PLAYER_HAVE][card_COM_HAVE];    //COMにとって負け
  1842.             chips_PLAYER_WIN();
  1843.             winlose_COMBO_COMLOSE();
  1844.         }
  1845.         else if( (pl<=com && com<=21) || pl>21 ){
  1846.             /*
  1847.                 COMがPLAYERより大きく、COMは21以下。
  1848.                 もしくは、PLAYERドボン
  1849.             */
  1850. //            printf("COMの勝ち");
  1851.             put_botton(bottonYOULOSE);
  1852.             kanjyo_NOW+=bounus_WIN[card_PLAYER_HAVE][card_COM_HAVE];
  1853.             chips_COM_WIN();
  1854.             winlose_COMBO_COMWIN();
  1855.         }
  1856. judge_end:
  1857.         kanjyo_NOW=kanjyo_limit(kanjyo_NOW);
  1858.         t->local_step=LS_Wait0i;
  1859.         winlose_COM_GAME_TOTAL++;
  1860.  
  1861.         /*
  1862.             CHIPSの判定
  1863.         */
  1864.         if( chips_COM<=0 ){
  1865.             t->local_step=LS_GameClear0i;
  1866.         }
  1867.         if( chips_PLAYER<=0 ){
  1868.             t->local_step=LS_GameOver0i;
  1869.         }
  1870.     }
  1871.     
  1872.     
  1873.     /*
  1874.         ゲームオーバー/クリア?
  1875.     */
  1876.     if( t->local_step==LS_GameOver0i || t->local_step==LS_GameClear0i ){
  1877.         short    *vram,z=0;
  1878.         for( vram=0xe00000; vram<0xe80000; vram++ ){
  1879.             *vram=z;
  1880.         }
  1881.         ETaskFree(ENEMYADR);
  1882.         ETaskFree(PLAYERADR);
  1883.         dispWait_COM=60;
  1884.         if( t->local_step==LS_GameOver0i ){ t->local_step=LS_GameOver0m; }
  1885.         else if( t->local_step==LS_GameClear0i ){ t->local_step=LS_GameClear0m; }
  1886.     }
  1887.     else if( t->local_step==LS_GameClear0m || t->local_step==LS_GameOver0m ){
  1888.         static short    cnt;
  1889.         short    of;
  1890.         if( cnt<=24 ){
  1891.             if( t->local_step==LS_GameClear0m ){
  1892.                 TR_PUT((24-cnt)*8,0,25-cnt);
  1893.                 TR_PUT(cnt*8,128,52-(24-cnt));
  1894.             }
  1895.             else{
  1896.                 TR_PUT((24-cnt)*8,0,0);
  1897.                 TR_PUT(cnt*8,128,0);
  1898.             }
  1899.             cnt++;
  1900.             dispWait_COM=2;
  1901.         }
  1902.         else if( 25<=cnt && cnt<=41 ){
  1903.             if( t->local_step==LS_GameClear0m ){
  1904.                 TASK    *eTask;
  1905.                 eTask=ETaskAlloc();
  1906.                 if( eTask ){
  1907.                     eTask->func_addr=ENEMY000_JOB;
  1908.                     eTask->disp0_addr=MUS0;
  1909.                     eTask->task_command=(rand()%(faceBIMYO-1))+1;
  1910.                     eTask->work[2]=1;    //ほうりなげフラグ
  1911.                 }
  1912.             }
  1913.             of=cnt-25;
  1914.             box(64-of,128-of,192+of,129+of,0x7800,0xffff);
  1915.             cnt++;
  1916.         }
  1917.         else if( cnt==42 ){
  1918.             of=cnt-25;
  1919.             box(64-of,128-of,192+of,129+of,0xffff,0xffff);
  1920.             if( t->local_step==LS_GameClear0m ){
  1921.                 symbol(64,120," おめでとさん ",1,1,1,0xffff,0);
  1922.             }
  1923.             else{
  1924.                 symbol(64,120," 負けちゃったい ",1,1,1,0xffff,0);
  1925.             }
  1926.             cnt++;
  1927.         }
  1928.         else if( cnt==43 && sDev.mbl==-1 ){
  1929.             TASK    *mTask;
  1930.             AllETaskFree();
  1931.             MTaskFree(t);
  1932.             mTask=MTaskAlloc();
  1933.             mTask->func_addr=STAGE000_JOB;
  1934.             cnt=0;
  1935.             goto quick_exit;
  1936.         }
  1937.     }
  1938.     
  1939.     
  1940.     /*
  1941.         待ちましょう
  1942.     */
  1943.     if( t->local_step==LS_Wait0i ){
  1944.         put_botton_CLOSE();
  1945.         change_BGM();
  1946. //        printf("\nマウスをクリックで次の試合\n");
  1947.         t->local_step=LS_Wait0m;
  1948.     }else if( t->local_step==LS_Wait0m ){
  1949.         if( sDev.mbl==-1 ){
  1950.             t->local_step=LS_Init0i;
  1951.             goto quick_exit;
  1952.         }
  1953.     }
  1954.  
  1955.  
  1956.     
  1957.     /*
  1958.         STEP更新(単純更新のみ)
  1959.     */
  1960.     switch( t->local_step ){
  1961.         case LS_Init0i:    t->local_step=LS_Init0m;    break;
  1962.         case LS_Init0m:    t->local_step=LS_Player0i;    break;
  1963.     }
  1964.  
  1965.  
  1966.     if( oDev.kb[0]!=0x02 && Dev.kb[0]==0x02 ){
  1967.         gameStep=STEP_EXIT;
  1968.     }
  1969.  
  1970. quick_exit:;
  1971.     return(0);
  1972. }
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979. /* [ EOF ] */
  1980.  
  1981.